#include <stdio.h>
#include <fcntl.h>
#include <semaphore.h>
#include <unistd.h>

#define FILENAME "a.txt"
#define SEM_A_NAME "/abc_sem"
#define SEM_B_NAME "/def_sem"

int main() {
    sem_t *sem_a = sem_open(SEM_A_NAME, O_CREAT, 0644, 1); // 初始可用
    sem_t *sem_b = sem_open(SEM_B_NAME, O_CREAT, 0644, 0); // 初始不可用
    
    if (sem_a == SEM_FAILED || sem_b == SEM_FAILED) {
        perror("sem_open failed");
        return 1;
    }

    FILE *fp = fopen(FILENAME, "a");
    if (!fp) {
        perror("fopen failed");
        return 1;
    }

    for (int i = 0; i < 5; i++) {
        sem_wait(sem_a);  // 等待A的信号量
        fprintf(fp, "ABC\n");
        fflush(fp);       // 立即刷新缓冲区
        sem_post(sem_b);  // 释放B的信号量
    }

    fclose(fp);
    sem_close(sem_a);
    sem_close(sem_b);
    sem_unlink(SEM_A_NAME);
    sem_unlink(SEM_B_NAME);
    return 0;
}
